package loads

import (
	"hi-jvm/instructions/base"
	"hi-jvm/rtda"
)

// 指令码： 0x17 指令： fload
type FLOAD struct{ base.Index8Instruction }

// 指令码： 0x22 指令： fload_0
type FLOAD_0 struct{ base.NoOperandsInstruction }
// 指令码： 0x23 指令： fload_1
type FLOAD_1 struct{ base.NoOperandsInstruction }
// 指令码： 0x24 指令： fload_2
type FLOAD_2 struct{ base.NoOperandsInstruction }
// 指令码： 0x25 指令： fload_3
type FLOAD_3 struct{ base.NoOperandsInstruction }

func (self *FLOAD) Execute(frame *rtda.Frame) {
	_fload(frame, self.Index)
}

func (self *FLOAD_0) Execute(frame *rtda.Frame) {
	_fload(frame, 0)
}

func (self *FLOAD_1) Execute(frame *rtda.Frame) {
	_fload(frame, 1)
}
func (self *FLOAD_2) Execute(frame *rtda.Frame) {
	_fload(frame, 2)
}
func (self *FLOAD_3) Execute(frame *rtda.Frame) {
	_fload(frame, 3)
}

func _fload(frame *rtda.Frame, index uint) {
	val := frame.LocalVars.GetFloat(index)
	frame.OperandStack.PushFloat(val)
}
